package cn.wolfcode.crm.util;

import cn.wolfcode.crm.domain.SystemLog;
import cn.wolfcode.crm.service.ISystemLogService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.aspectj.lang.JoinPoint;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;

/**
 * 日志工具类
 */
public class SystemLogUtil {

    @Autowired
    private ISystemLogService systemLogService;

    public void writeLog(JoinPoint joinPoint) {
        //不记录日志的操作
        if(joinPoint.getTarget() instanceof ISystemLogService){
            return;
        }
        //创建日志对象
        SystemLog log = new SystemLog();
        //操作时间
        log.setOpTime(new Date());
        //当前用户
        log.setOpUser(UserContext.getUserContext());
        //操作ip 通过获取当前请求
        log.setOpIp(UserContext.getRequest().getRemoteAddr());
        //类名
        String className = joinPoint.getTarget().getClass().getName();
        //方法名
        String methodName = joinPoint.getSignature().getName();
        //如果方法 开头有以下的四个字段 都不记录在日志中
        if(methodName.startsWith("query") ||
           methodName.startsWith("select") ||
           methodName.startsWith("list") ||
           methodName.startsWith("get") ||
           methodName.startsWith("all")){
            //结束其方法 不记录到日志中
            return;
        }

        //操作的方法
        log.setFunction(className + ":" + methodName);

        //如果方法 开头有以下的四个字段 都不记录在日志中
        if(methodName.startsWith("query") ||
                methodName.startsWith("select") ||
                methodName.startsWith("list") ||
                methodName.startsWith("get")){
            //结束其方法 不记录到日志中
            return;
        }

        try {
            //获取传入的参数
            log.setParams(new ObjectMapper().writeValueAsString(joinPoint.getArgs()));
            //插入日志对象到数据库
            systemLogService.saveOrUpdate(log);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}
